package org.bigjava.novelplatform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.bigjava.novelplatform.entity.Chapter;
import org.bigjava.novelplatform.vo.ChapterContent;
import org.bigjava.novelplatform.vo.ChapterOrderVo;

import java.util.List;

/**
 * @author YKH
 * @description 针对表【chapter】的数据库操作Mapper
 * @createDate 2022-03-20 14:42:21
 * @Entity org.bigjava.novelplatform.entity.Chapter
 */
public interface ChapterMapper extends BaseMapper<Chapter> {

    /**
     * 获取最后n章
     * @param bookId
     * @param num
     * @return
     */
    List<Chapter> selectLastByBookId(@Param("bookId") Integer bookId, @Param("num") Integer num);

    /**
     * 查询书籍全部章节
     * @param bookId
     * @return
     */
    List<Chapter> selectByBookId(@Param("bookId") Integer bookId);

    /**根据id获取章节数据*/
    Chapter selectChapter(@Param("id") Long id);

    /**查询指定ID的章节(未删除)url*/
    String selectChapterUrlbyID(@Param("id") Long id);

    /**查询指定书籍的指定章节(未删除) url*/
    String selectChapterUrlString(@Param("bookid") Integer bookid, @Param("chapterOrder") Integer chapterOrder);

    /**
     * 查询指定书籍 第几章节(未删除) 的数量（0/1）
     */
    Integer selectChapterOrderAmount(@Param("bookId") Integer bookId, @Param("order") Integer order);

    /**
     * 查询指定id章节的发布状态
     */
    Integer selectAllByPublishInteger(@Param("id") Integer id);

    /**
     * 查询指定id章节的审核状态
     */

    Integer selectAllByVerifyInteger(@Param("id") Integer id);

    /**
     * 查询指定id章节的逻辑删除状态
     */
    Integer selectDeleteStateInteger(@Param("id") Long id);

    /**更新逻辑删除后的数据*/
    Integer updateChapterDeleteData(@Param("chapter") Chapter chapter);

    /**更新指定书籍中 指定url的章节的标题和url*/
    Integer updateChapterTitlebyURL(@Param("bookid") Integer bookid, @Param("url") String url, @Param("title") String title, @Param("newURL") String newURL);

    /**更新指定书籍中 指定url的章节的标题和url以及delete_state属性*/
    Integer updateChapterTitlorStateebyURL(@Param("bookid") Integer bookid, @Param("url") String url, @Param("title") String title, @Param("newURL") String newURL, @Param("delete_state") Integer delete_state);

    /**获取章节表中指定book_id的最小章节（小于-1）*/
    Integer selectAllByChapterOrderMin(@Param("bookId") Integer bookId);

    /**获取指定id章节的书籍目录*/
    String selectBookUrlByChapterId(@Param("chaoterId") Long chaoterId);

    /**
     * 查询未发布的草稿章节
     * @param bookId
     * @return
     */
    List<ChapterContent> selectDraftList(@Param("bookId") Integer bookId);

    /**
     * 查询存稿
     * @param bookId
     * @param limit
     * @return
     */
    List<Chapter> selectDepositManuscript(@Param("bookId") Integer bookId, @Param("limit") Integer limit);

    /**
     * 查询本书的新章节
     * @param bookId
     * @return
     */
    Integer maxOrder(@Param("bookId") Integer bookId);

    /**
     * 查询已发布章节
     * @param bookId
     * @return
     */
    List<ChapterContent> selectPublishList(@Param("bookId") Integer bookId);

    /**
     * 查询已发布的前limit章
     * @param bookId
     * @param limit
     * @return
     */
    List<ChapterContent> selectPublishListLimit(@Param("bookId") Integer bookId, @Param("limit") Integer limit);


    /**
     * 还原章节
     * @param chapterId
     */
    void restoreChapter(@Param("chapterId") Long chapterId);

    /**
     * 删除列表
     * @param bookId
     * @return
     */
    List<ChapterContent> selectDeleteList(@Param("bookId") Integer bookId);

    /**
     * 查询章节，但不限于已删除
     * @param chapterId
     * @return
     */
    Chapter selectByIdIncludeDelete(@Param("chapterId") Long chapterId);

    /**
     * 使用章节的序列id查询章节的内容
     * @param bookId
     * @param chapterOrder
     * @return
     */
    Chapter selectChapterOrder(Integer bookId, Integer chapterOrder);

}




